0x608060405260043610610037575f3560e01c806301ffc9a7146100f557806350f1370914610161578063d748b999146101805761003e565b3661003e57005b5f7faab760237e39f9aad10fcfc005484cb19a7fafbfa4772d5ae586b83789f67cd15f80356001600160e01b03191681526020829052604090205490915060601c806100d15760405162461bcd60e51b815260206004820152601860248201527f46756e6374696f6e20646f6573206e6f742065786973742e000000000000000060448201526064015b60405180910390fd5b604051365f82375f803683855af43d805f843e8180156100ef578184f35b8184fd5b005b348015610100575f80fd5b5061014c61010f36600461028a565b6001600160e01b0319165f9081527faab760237e39f9aad10fcfc005484cb19a7fafbfa4772d5ae586b83789f67cd4602052604090205460ff1690565b60405190151581526020015b60405180910390f35b34801561016c575f80fd5b506100f361017b3660046102f6565b6101b6565b34801561018b575f80fd5b505f5461019e906001600160a01b031681565b6040516001600160a01b039091168152602001610158565b5f546001600160a01b031633146102085760405162461bcd60e51b815260206004820152601660248201527526bab9ba1037bbb7103a34329031b7b73a3930b1ba1760511b60448201526064016100c8565b7f23c99902bd20175af7869f805847c34572dcf321a973ed1a88e16e09df61afe65f5b83518110156102845782825f015f86848151811061024b5761024b6103c8565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff191691151591909117905560010161022b565b50505050565b5f6020828403121561029a575f80fd5b81356001600160e01b0319811681146102b1575f80fd5b9392505050565b634e487b7160e01b5f52604160045260245ffd5b80356001600160a01b03811681146102e2575f80fd5b919050565b803580151581146102e2575f80fd5b5f8060408385031215610307575f80fd5b823567ffffffffffffffff8082111561031e575f80fd5b818501915085601f830112610331575f80fd5b8135602082821115610345576103456102b8565b8160051b604051601f19603f8301168101818110868211171561036a5761036a6102b8565b604052928352818301935084810182019289841115610387575f80fd5b948201945b838610156103ac5761039d866102cc565b8552948201949382019361038c565b96506103bb90508782016102e7565b9450505050509250929050565b634e487b7160e01b5f52603260045260245ffdfea264697066735822122092022dc537083ef530da191f23e9b26ddf0a5dd37377d68c11a6a2c4cf16dbc664736f6c63430008170033
0x608060405234801561000f575f80fd5b505f80546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35f7f23c99902bd20175af7869f805847c34572dcf321a973ed1a88e16e09df61afe6335f90815260208290526040808220805460ff191660011790555191925090610098906103f3565b604051809103905ff0801580156100b1573d5f803e3d5ffd5b5090505f6040516100c190610400565b604051809103905ff0801580156100da573d5f803e3d5ffd5b50604080516003808252608082019092529192505f9190816020015b60608152602001906001900390816100f6579050506040516001600160601b0319606086901b166020820152634cfafa9760e11b6034820152909150603801604051602081830303815290604052815f815181106101565761015661040d565b602090810291909101810191909152604080516001600160601b0319606086901b16928101929092526356fe50af60e11b6034830152637a0ed62760e01b60388301526366ffd66360e11b603c8301526314bbdacb60e21b90820152604401604051602081830303815290604052816001815181106101d7576101d761040d565b6020908102919091018101919091526040516001600160601b03193060601b16918101919091526301ffc9a760e01b6034820152603801604051602081830303815290604052816002815181106102305761023061040d565b60200260200101819052505f6399f5f52e60e01b826040516024016102559190610443565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090505f846001600160a01b0316826040516102a391906104bb565b5f60405180830381855af49150503d805f81146102db576040519150601f19603f3d011682016040523d82523d5f602084013e6102e0565b606091505b50509050806103355760405162461bcd60e51b815260206004820152601860248201527f416464696e672066756e6374696f6e73206661696c65642e0000000000000000604482015260640160405180910390fd5b50507faab760237e39f9aad10fcfc005484cb19a7fafbfa4772d5ae586b83789f67cd460205250507f47b369c4713f978f368ffa87d970603fae791fdd9a78134a46ad7a9ac87057fd8054600160ff1991821681179092557fa51b9da98aace45f55f497708ce232a2e27219a30e7947bb75e199b0c24f3aaf80548216831790556348e2b09360e01b5f527f8d4375c22d31895c6c0e76ab0e8abf996fae42d3240e624a1239b438d92acca780549091169091179055506104d69050565b610bbf806108f583390190565b61111e806114b483390190565b634e487b7160e01b5f52603260045260245ffd5b5f5b8381101561043b578181015183820152602001610423565b50505f910152565b5f602080830181845280855180835260408601915060408160051b87010192508387015f5b828110156104ae57878503603f190184528151805180875261048f818989018a8501610421565b601f01601f191695909501860194509285019290850190600101610468565b5092979650505050505050565b5f82516104cc818460208701610421565b9190910192915050565b610412806104e35f395ff3fe608060405260043610610037575f3560e01c806301ffc9a7146100f557806350f1370914610161578063d748b999146101805761003e565b3661003e57005b5f7faab760237e39f9aad10fcfc005484cb19a7fafbfa4772d5ae586b83789f67cd15f80356001600160e01b03191681526020829052604090205490915060601c806100d15760405162461bcd60e51b815260206004820152601860248201527f46756e6374696f6e20646f6573206e6f742065786973742e000000000000000060448201526064015b60405180910390fd5b604051365f82375f803683855af43d805f843e8180156100ef578184f35b8184fd5b005b348015610100575f80fd5b5061014c61010f36600461028a565b6001600160e01b0319165f9081527faab760237e39f9aad10fcfc005484cb19a7fafbfa4772d5ae586b83789f67cd4602052604090205460ff1690565b60405190151581526020015b60405180910390f35b34801561016c575f80fd5b506100f361017b3660046102f6565b6101b6565b34801561018b575f80fd5b505f5461019e906001600160a01b031681565b6040516001600160a01b039091168152602001610158565b5f546001600160a01b031633146102085760405162461bcd60e51b815260206004820152601660248201527526bab9ba1037bbb7103a34329031b7b73a3930b1ba1760511b60448201526064016100c8565b7f23c99902bd20175af7869f805847c34572dcf321a973ed1a88e16e09df61afe65f5b83518110156102845782825f015f86848151811061024b5761024b6103c8565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff191691151591909117905560010161022b565b50505050565b5f6020828403121561029a575f80fd5b81356001600160e01b0319811681146102b1575f80fd5b9392505050565b634e487b7160e01b5f52604160045260245ffd5b80356001600160a01b03811681146102e2575f80fd5b919050565b803580151581146102e2575f80fd5b5f8060408385031215610307575f80fd5b823567ffffffffffffffff8082111561031e575f80fd5b818501915085601f830112610331575f80fd5b8135602082821115610345576103456102b8565b8160051b604051601f19603f8301168101818110868211171561036a5761036a6102b8565b604052928352818301935084810182019289841115610387575f80fd5b948201945b838610156103ac5761039d866102cc565b8552948201949382019361038c565b96506103bb90508782016102e7565b9450505050509250929050565b634e487b7160e01b5f52603260045260245ffdfea264697066735822122092022dc537083ef530da191f23e9b26ddf0a5dd37377d68c11a6a2c4cf16dbc664736f6c63430008170033608060405234801561000f575f80fd5b505f80546001600160a01b03191633179055610b918061002e5f395ff3fe608060405234801561000f575f80fd5b506004361061003f575f3560e01c806350f137091461004357806399f5f52e14610058578063d748b9991461006b575b5f80fd5b610056610051366004610864565b610099565b005b61005661006636600461091b565b610172565b5f5461007d906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b5f546001600160a01b031633146100f05760405162461bcd60e51b815260206004820152601660248201527526bab9ba1037bbb7103a34329031b7b73a3930b1ba1760511b60448201526064015b60405180910390fd5b7f23c99902bd20175af7869f805847c34572dcf321a973ed1a88e16e09df61afe65f5b835181101561016c5782825f015f86848151811061013357610133610a17565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101610113565b50505050565b5f546001600160a01b031633146101c45760405162461bcd60e51b815260206004820152601660248201527526bab9ba1037bbb7103a34329031b7b73a3930b1ba1760511b60448201526064016100e7565b6040805160c0810182525f6020820181905291810182905260608101829052608080820183905260a08201929092527faab760237e39f9aad10fcfc005484cb19a7fafbfa4772d5ae586b83789f67cd3548082527faab760237e39f9aad10fcfc005484cb19a7fafbfa4772d5ae586b83789f67cd1926fffffffffffffffffffffffffffffffff821691901c801561026e575f828152600185016020908152604090912054908401525b5f5b855181101561076e575f86828151811061028c5761028c610a17565b6020026020010151905060148151116102e75760405162461bcd60e51b815260206004820152601f60248201527f4d697373696e67206661636574206f722073656c6563746f7220696e666f2e0060448201526064016100e7565b602081015181516001600160601b03198216905f9060049061030b90601490610a3f565b6103159190610a58565b9050603482156104bd575f5b828110156104b75785820151610338600484610a77565b6001600160e01b031982165f90815260208e90526040812054919450819003610425576001600160e01b031982165f90815260208e8152604091829020918c901b88178d1790915561038b908b90610a8a565b6001600160e01b03198316901c6103a38b6020610a8a565b60208e0180516001600160e01b031990921c19909116919091179052896103c981610aa1565b9a505089600803610419578b602001518d6001015f8d81526020019081526020015f20819055505f801b8c60200181815250505f99508a8061040a90610aa1565b5f60a08f01529b506104ad9050565b600160a08d01526104ad565b6001600160601b0319808716908216036104815760405162461bcd60e51b815260206004820152601b60248201527f46756e6374696f6e2063757420746f2073616d652066616365742e000000000060448201526064016100e7565b6001600160e01b031982165f90815260208e9052604090206bffffffffffffffffffffffff8216871790555b5050600101610321565b5061075d565b5f5b8281101561075b57858201516104d6600484610a77565b6001600160e01b031982165f90815260208e9052604081205491945081900361054f5760405162461bcd60e51b815260206004820152602560248201527f46756e6374696f6e20646f65736e27742065786973742e2043616e277420726560448201526436b7bb329760d91b60648201526084016100e7565b60208c01515f03610589578a61056481610ab9565b9b50508c6001015f8c81526020019081526020015f20548c6020018181525050600899505b67ffffffffffffffff811660408d81019190915281901c63ffffffff1660608d01525f6105b760018c610a3f565b6105c2906020610a8a565b8d60200151901b90508b8d6040015114610677578d6001015f8e6040015181526020019081526020015f20548d60800181815250508c6060015160206106089190610a8a565b816001600160e01b031916901c8d6060015160206106269190610a8a565b6001600160e01b03195f1b901c198e6080015116178d60800181815250508c608001518e6001015f8f6040015181526020019081526020015f20819055508a8061066f90610ab9565b9b50506106cf565b60608d0151610687906020610a8a565b816001600160e01b031916901c8d6060015160206106a59190610a8a565b60208f0180516001600160e01b031990921c199091169190911790528a6106cb81610ab9565b9b50505b8a5f036106ee575f8c815260018f016020908152604082208290558e01525b6001600160e01b031981811690841614610739576001600160e01b031981165f90815260208f90526040902080546001600160601b0319166bffffffffffffffffffffffff84161790555b50506001600160e01b0319165f90815260208c905260408120556001016104bf565b505b505060019093019250610270915050565b508251608082901b831790811461078757600285018190555b8360a00151156107a9576020808501515f858152600188019092526040909120555b7f6ace155508eb66f4d8afce32f392ee3b0a8ab3c0133964f1f3c613e497da45fe866040516107d89190610ace565b60405180910390a1505050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610825576108256107e8565b604052919050565b5f67ffffffffffffffff821115610846576108466107e8565b5060051b60200190565b8035801515811461085f575f80fd5b919050565b5f8060408385031215610875575f80fd5b823567ffffffffffffffff81111561088b575f80fd5b8301601f8101851361089b575f80fd5b803560206108b06108ab8361082d565b6107fc565b82815260059290921b830181019181810190888411156108ce575f80fd5b938201935b838510156109005784356001600160a01b03811681146108f1575f80fd5b825293820193908201906108d3565b955061090f9050868201610850565b93505050509250929050565b5f602080838503121561092c575f80fd5b823567ffffffffffffffff80821115610943575f80fd5b8185019150601f86601f840112610958575f80fd5b82356109666108ab8261082d565b81815260059190911b84018501908581019089831115610984575f80fd5b8686015b83811015610a095780358681111561099e575f80fd5b8701603f81018c136109ae575f80fd5b888101356040888211156109c4576109c46107e8565b6109d5828901601f19168c016107fc565b8281528e828486010111156109e8575f80fd5b828285018d8301375f9281018c019290925250845250918701918701610988565b509998505050505050505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b81810381811115610a5257610a52610a2b565b92915050565b5f82610a7257634e487b7160e01b5f52601260045260245ffd5b500490565b80820180821115610a5257610a52610a2b565b8082028115828204841417610a5257610a52610a2b565b5f60018201610ab257610ab2610a2b565b5060010190565b5f81610ac757610ac7610a2b565b505f190190565b5f602080830181845280855180835260408601915060408160051b87010192508387015f5b82811015610b4e57878503603f19018452815180518087525f5b81811015610b28578281018901518882018a01528801610b0d565b505f878201890152601f01601f1916909501860194509285019290850190600101610af3565b509297965050505050505056fea2646970667358221220dc8e5e438f0b4112284ca34fa20152b88d17df5502ce285d6274cd3d8bcb033864736f6c63430008170033608060405234801561000f575f80fd5b506111018061001d5f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c806352ef6b2c1461004e5780637a0ed6271461006c578063adfca15e14610081578063cdffacc614610094575b5f80fd5b6100566100e4565b6040516100639190610ef1565b60405180910390f35b6100746103b2565b6040516100639190610f0a565b61005661008f366004610f6c565b610c2d565b6100cc6100a2366004610f92565b6001600160e01b0319165f9081525f805160206110ac833981519152602052604090205460601c90565b6040516001600160a01b039091168152602001610063565b7faab760237e39f9aad10fcfc005484cb19a7fafbfa4772d5ae586b83789f67cd3546060905f805160206110ac833981519152906001600160801b0381169060801c5f81610133846008610fcd565b61013d9190610fea565b90508115610153578261014f81610ffd565b9350505b5f8167ffffffffffffffff81111561016d5761016d611015565b604051908082528060200260200182016040528015610196578160200160208202803683370190505b5090505f805f5b848210156102bc575f818152600189016020526040812054905b60088110156102a757836101ca81610ffd565b9450508684116102a7575f6101e0826020610fcd565b83901b6001600160e01b031981165f90815260208d9052604081205491925060609190911c90805b888110156102535789818151811061022257610222611029565b60200260200101516001600160a01b0316836001600160a01b03160361024b5760019150610253565b600101610208565b508015610263575061029f915050565b8189898151811061027657610276611029565b6001600160a01b03909216602092830291909101909101528761029881610ffd565b9850505050505b6001016101b7565b505080806102b490610ffd565b91505061019d565b505f6102c9836014610fcd565b67ffffffffffffffff8111156102e1576102e1611015565b6040519080825280601f01601f19166020018201604052801561030b576020820181803683370190505b5090505f805b848110156103a3575f5b601481101561039a5761032f816008610fcd565b87838151811061034157610341611029565b602002602001015160601b6bffffffffffffffffffffffff1916901b84848151811061036f5761036f611029565b60200101906001600160f81b03191690815f1a9053508261038f81610ffd565b93505060010161031b565b50600101610311565b50909998505050505050505050565b7faab760237e39f9aad10fcfc005484cb19a7fafbfa4772d5ae586b83789f67cd3546060905f805160206110ac833981519152906001600160801b0381169060801c5f81610401846008610fcd565b61040b9190610fea565b90508115610421578261041d81610ffd565b9350505b80601481111561042f575060145b5f8167ffffffffffffffff81111561044957610449611015565b60405190808252806020026020018201604052801561048e57816020015b604080518082019091525f8152606060208201528152602001906001900390816104675790505b5090505f8267ffffffffffffffff8111156104ab576104ab611015565b6040519080825280602002602001820160405280156104d4578160200160208202803683370190505b5090505f805f5b86821015610a35575f81815260018b016020526040812054905b6008811015610a20578361050881610ffd565b945050888411610a20575f61051e826020610fcd565b83901b6001600160e01b031981165f90815260208f9052604081205491925060609190911c90805b8881101561079357826001600160a01b03168b828151811061056a5761056a611029565b60200260200101515f01516001600160a01b03160361078b575f8b828151811061059657610596611029565b602002602001015160200151519050808b83815181106105b8576105b8611029565b602002602001015160016105cc919061103d565b60ff1611156106bd575f6105e08e83610fea565b67ffffffffffffffff8111156105f8576105f8611015565b604051908082528060200260200182016040528015610621578160200160208202803683370190505b5090505f5b82811015610698578d848151811061064057610640611029565b602002602001015160200151818151811061065d5761065d611029565b602002602001015182828151811061067757610677611029565b6001600160e01b031990921660209283029190910190910152600101610626565b50808d84815181106106ac576106ac611029565b602002602001015160200181905250505b848c83815181106106d0576106d0611029565b6020026020010151602001518c84815181106106ee576106ee611029565b602002602001015160ff168151811061070957610709611029565b60200260200101906001600160e01b03191690816001600160e01b0319168152505060ff8b838151811061073f5761073f611029565b602002602001015160ff1610610753575f80fd5b8a828151811061076557610765611029565b60200260200101805180919061077a90611056565b60ff16905250600192506107939050565b600101610546565b5080156107a35750610a18915050565b8951806107b18a6001610fea565b11156108ff575f6107c28d83610fea565b67ffffffffffffffff8111156107da576107da611015565b60405190808252806020026020018201604052801561081f57816020015b604080518082019091525f8152606060208201528152602001906001900390816107f85790505b5090505f61082d8e84610fea565b67ffffffffffffffff81111561084557610845611015565b60405190808252806020026020018201604052801561086e578160200160208202803683370190505b5090505f5b838110156108f8578d818151811061088d5761088d611029565b60200260200101518382815181106108a7576108a7611029565b60200260200101819052508c81815181106108c4576108c4611029565b60200260200101518282815181106108de576108de611029565b60ff90921660209283029190910190910152600101610873565b50909b5099505b828b8a8151811061091257610912611029565b60209081029190910101516001600160a01b0390911690528b67ffffffffffffffff81111561094357610943611015565b60405190808252806020026020018201604052801561096c578160200160208202803683370190505b508b8a8151811061097f5761097f611029565b602002602001015160200181905250838b8a815181106109a1576109a1611029565b6020026020010151602001515f815181106109be576109be611029565b60200260200101906001600160e01b03191690816001600160e01b0319168152505060018a8a815181106109f4576109f4611029565b60ff9092166020928302919091019091015288610a1081610ffd565b995050505050505b6001016104f5565b50508080610a2d90610ffd565b9150506104db565b505f8267ffffffffffffffff811115610a5057610a50611015565b604051908082528060200260200182016040528015610a8357816020015b6060815260200190600190039081610a6e5790505b5090505f5b83811015610c1e575f858281518110610aa357610aa3611029565b602002602001015160ff1690505f816004610abe9190610fcd565b67ffffffffffffffff811115610ad657610ad6611015565b6040519080825280601f01601f191660200182016040528015610b00576020820181803683370190505b5090505f888481518110610b1657610b16611029565b60200260200101516020015190505f805b84811015610bb1575f5b6004811015610ba857610b45816008610fcd565b848381518110610b5757610b57611029565b60200260200101516001600160e01b031916901b858481518110610b7d57610b7d611029565b60200101906001600160f81b03191690815f1a90535082610b9d81610ffd565b935050600101610b31565b50600101610b27565b50898581518110610bc457610bc4611029565b60200260200101515f015183604051602001610be1929190611074565b604051602081830303815290604052868681518110610c0257610c02611029565b6020026020010181905250505050508080600101915050610a88565b509a9950505050505050505050565b7faab760237e39f9aad10fcfc005484cb19a7fafbfa4772d5ae586b83789f67cd3546060905f805160206110ac833981519152906001600160801b0381169060801c5f81610c7c846008610fcd565b610c869190610fea565b90508115610c9c5782610c9881610ffd565b9350505b5f808267ffffffffffffffff811115610cb757610cb7611015565b604051908082528060200260200182016040528015610ce0578160200160208202803683370190505b5090505f805b84821015610db5575f818152600189016020526040812054905b6008811015610da05783610d1381610ffd565b945050868411610da0575f610d29826020610fcd565b83901b6001600160e01b031981165f90815260208d9052604090205490915060601c6001600160a01b038e16819003610d965781878981518110610d6f57610d6f611029565b6001600160e01b03199092166020928302919091019091015287610d9281610ffd565b9850505b5050600101610d00565b50508080610dad90610ffd565b915050610ce6565b505f610dc2846004610fcd565b67ffffffffffffffff811115610dda57610dda611015565b6040519080825280601f01601f191660200182016040528015610e04576020820181803683370190505b5090505f805b85811015610e94575f5b6004811015610e8b57610e28816008610fcd565b868381518110610e3a57610e3a611029565b60200260200101516001600160e01b031916901b848481518110610e6057610e60611029565b60200101906001600160f81b03191690815f1a90535082610e8081610ffd565b935050600101610e14565b50600101610e0a565b50909a9950505050505050505050565b5f5b83811015610ebe578181015183820152602001610ea6565b50505f910152565b5f8151808452610edd816020860160208601610ea4565b601f01601f19169290920160200192915050565b602081525f610f036020830184610ec6565b9392505050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b82811015610f5f57603f19888603018452610f4d858351610ec6565b94509285019290850190600101610f31565b5092979650505050505050565b5f60208284031215610f7c575f80fd5b81356001600160a01b0381168114610f03575f80fd5b5f60208284031215610fa2575f80fd5b81356001600160e01b031981168114610f03575f80fd5b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610fe457610fe4610fb9565b92915050565b80820180821115610fe457610fe4610fb9565b5f6001820161100e5761100e610fb9565b5060010190565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b60ff8181168382160190811115610fe457610fe4610fb9565b5f60ff821660ff810361106b5761106b610fb9565b60010192915050565b6bffffffffffffffffffffffff198360601b1681525f825161109d816014850160208701610ea4565b91909101601401939250505056feaab760237e39f9aad10fcfc005484cb19a7fafbfa4772d5ae586b83789f67cd1a2646970667358221220e81961cd729b3b41049a43a3a7d3c8334d5685334a14427460b18e9750ba177564736f6c63430008170033