0x6080604052348015600e575f80fd5b5060036020527f5ed261ce397475c8f8ccd7526f550ae383248415591df3d1b32ee25c9ab0af2e805462ffffff19908116600a17909155610bb85f527fa81df8da5a49e0ca2395b3c1eb4d55b23a04eb0615a8bee310459ef8a1c6e29c8054909116603c179055614a8b806100825f395ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c80636441c7801461004e578063890357301461008b578063a167129514610103578063bae0d9181461012e575b5f80fd5b61007261005c366004610491565b60036020525f908152604090205462ffffff1681565b60405162ffffff90911681526020015b60405180910390f35b5f546001546002546100c3926001600160a01b03908116928116919081169062ffffff600160a01b8204811691600160b81b90041685565b604080516001600160a01b0396871681529486166020860152929094169183019190915262ffffff9081166060830152909116608082015260a001610082565b6101166101113660046104c7565b610167565b6040516001600160a01b039091168152602001610082565b61011661013c3660046104c7565b600460209081525f93845260408085208252928452828420905282529020546001600160a01b031681565b5f826001600160a01b0316846001600160a01b03160361019a5760405163fbfc7a9160e01b815260040160405180910390fd5b62ffffff8083165f9081526003602052604081205490911690036101d1576040516309c74fbb60e21b815260040160405180910390fd5b826001600160a01b0316846001600160a01b0316106101f15782846101f4565b83835b90945092506001600160a01b038416610220576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b038481165f9081526004602090815260408083208785168452825280832062ffffff87168452909152902054161561027257604051630188c99160e11b815260040160405180910390fd5b6040805160a0810182523081526001600160a01b03868116602080840191825287831684860190815262ffffff8881165f8181526003855288812054909216606080890182905260808901839052975183546001600160a01b03199081169189169190911790935594516001805490931690871617909155905160028054919095166001600160b81b031990911617600160a01b9093029290921762ffffff60b81b1916600160b81b9092029190911790915591516bffffffffffffffffffffffff1987831b8116938201939093529085901b90911660348201526001600160e81b031960e884901b166048820152604b01604051602081830303815290604052805190602001206040516103869061046d565b8190604051809103905ff59050801580156103a3573d5f803e3d5ffd5b505f80546001600160a01b031990811682556001805482169055600280546001600160d01b03191690556001600160a01b038781168084526004602081815260408087208b861680895290835281882062ffffff8c16808a5290845282892080548916978b1697881790558189529383528188208589528352818820848952835296819020805490961685179095559351928352949550917f97d23878912fda7f82bd5a8502f2c6e9086f5a4728f9054627788b3162f86ced910160405180910390a49392505050565b61454e8061050883390190565b803562ffffff8116811461048c575f80fd5b919050565b5f602082840312156104a1575f80fd5b6104aa8261047a565b9392505050565b80356001600160a01b038116811461048c575f80fd5b5f805f606084860312156104d9575f80fd5b6104e2846104b1565b92506104f0602085016104b1565b91506104fe6040850161047a565b9050925092509256fe610120604052348015610010575f80fd5b50336001600160a01b031663890357306040518163ffffffff1660e01b815260040160a0604051808303815f875af115801561004e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061007291906100cb565b62ffffff908116610100521660e0526001600160a01b0390811660c05290811660a0521660805261012c565b80516001600160a01b03811681146100b4575f80fd5b919050565b805162ffffff811681146100b4575f80fd5b5f805f805f60a086880312156100df575f80fd5b6100e88661009e565b94506100f66020870161009e565b93506101046040870161009e565b9250610112606087016100b9565b9150610120608087016100b9565b90509295509295909350565b60805160a05160c05160e051610100516143676101e75f395f8181610491015281816107e80152818161081e015261135b01525f818161041c015281816112af01528181611bb30152611beb01525f8181610457015281816108f901528181610a0901528181610b9001528181610e2c015281816116d90152611df701525f81816101510152818161086d0152818161098701528181610ae001528181610d3a015281816117d30152611d6801525f6103f501526143675ff3fe608060405234801561000f575f80fd5b5060043610610148575f3560e01c8063514ea4bf116100bf578063d21220a711610079578063d21220a714610452578063dd5a12d814610479578063ddca3f431461048c578063f3058399146104b3578063f30dba93146104bc578063f637731d14610544575f80fd5b8063514ea4bf1461031e5780635339c2961461039e578063883bdbfd146103bd578063a34123a7146103dd578063c45a0155146103f0578063d0c93a7c14610417575f80fd5b806332148f671161011057806332148f67146102145780633850c7bd146102295780633c8a7d8d146102a757806346141319146102cf5780634a182392146102d85780634f1eb3d8146102eb575f80fd5b80630dfe16811461014c578063164ab7e6146101905780631a686502146101a7578063252c09d7146101d257806326d023f31461020c575b5f80fd5b6101737f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61019960015481565b604051908152602001610187565b6005546101ba906001600160801b031681565b6040516001600160801b039091168152602001610187565b6101e56101e0366004613adf565b610557565b6040805163ffffffff909416845260069290920b6020840152151590820152606001610187565b6101995f5481565b610227610222366004613af6565b61058a565b005b600454610269906001600160a01b03811690600160a01b810460020b9061ffff600160b81b8204811691600160c81b8104821691600160d81b9091041685565b604080516001600160a01b03909616865260029490940b602086015261ffff928316938501939093528116606084015216608082015260a001610187565b6102ba6102b5366004613b9a565b610619565b60408051928352602083019190915201610187565b61019960035481565b6102276102e6366004613c1d565b6107e1565b6102fe6102f9366004613c6c565b610c66565b604080516001600160801b03938416815292909116602083015201610187565b61036861032c366004613adf565b60086020525f908152604090208054600182015460028301546003909301546001600160801b0392831693919281811691600160801b90041685565b604080516001600160801b039687168152602081019590955284019290925283166060830152909116608082015260a001610187565b6101996103ac366004613ccf565b60076020525f908152604090205481565b6103d06103cb366004613cef565b610f2e565b6040516101879190613d60565b6102ba6103eb366004613da5565b610f9c565b6101737f000000000000000000000000000000000000000000000000000000000000000081565b61043e7f000000000000000000000000000000000000000000000000000000000000000081565b60405162ffffff9091168152602001610187565b6101737f000000000000000000000000000000000000000000000000000000000000000081565b6102ba610487366004613de5565b6110d2565b61043e7f000000000000000000000000000000000000000000000000000000000000000081565b61019960025481565b6105096104ca366004613e30565b60066020525f9081526040902080546001820154600283015460039093015460ff8316936101009093046001600160801b031692600f9290920b919085565b6040805195151586526001600160801b039094166020860152600f9290920b928401929092526060830191909152608082015260a001610187565b610227610552366004613e49565b611943565b60098161ffff8110610567575f80fd5b015463ffffffff81169150600160201b810460060b90600160581b900460ff1683565b600454600160d81b900461ffff165f6105a560098385611a62565b90508161ffff168161ffff1614610614576004805461ffff60d81b1916600160d81b61ffff8481169182029290921790925560408051918516825260208201929092527fac49e518f90a358f652e4400164f05a5d8f7e35e7747279bc3a93dbf584e125a910160405180910390a15b505050565b5f808560020b8760020b1215806106375750620d89e719600288900b125b80610653575061064a620d89e719613e78565b60020b8660020b135b15610670576040516264847d60e41b815260040160405180910390fd5b846001600160801b03165f0361069957604051630200e8a960e31b815260040160405180910390fd5b5f806106d660405180608001604052808c6001600160a01b031681526020018b60020b81526020018a60020b815260200189600f0b815250611ad1565b92509250508193508092505f805f8611156106f6576106f3611d51565b91505b841561070757610704611de0565b90505b60405163d348799760e01b8152339063d34879979061073090899089908d908d90600401613ec0565b5f604051808303815f87803b158015610747575f80fd5b505af1158015610759573d5f803e3d5ffd5b5050505f86905550610769611de0565b600155604080513381526001600160801b038b1660208201529081018790526060810186905260028b810b91908d900b906001600160a01b038f16907f7a53080ba414158be7ec69b987b5fb7d07dee101fe85488f0853ae16239d0bde9060800160405180910390a450505050965096945050505050565b5f610815857f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f4240611e2e565b90505f61084b857f000000000000000000000000000000000000000000000000000000000000000062ffffff16620f4240611e2e565b6040516370a0823160e01b81523060048201529091505f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024016020604051808303815f875af11580156108b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d79190613edf565b6040516370a0823160e01b81523060048201529091505f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024016020604051808303815f875af115801561093f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109639190613edf565b905087156109e75760405163a9059cbb60e01b8152336004820152602481018990527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044015f604051808303815f87803b1580156109d0575f80fd5b505af11580156109e2573d5f803e3d5ffd5b505050505b8615610a695760405163a9059cbb60e01b8152336004820152602481018890527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044015f604051808303815f87803b158015610a52575f80fd5b505af1158015610a64573d5f803e3d5ffd5b505050505b604051630e9cbafb60e41b8152339063e9cbafb090610a9290879087908b908b90600401613ec0565b5f604051808303815f87803b158015610aa9575f80fd5b505af1158015610abb573d5f803e3d5ffd5b505050508382610acb9190613ef6565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a08231906024016020604051808303815f875af1158015610b2e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b529190613edf565b1015610b7157604051637bc35e0560e01b815260040160405180910390fd5b610b7b8382613ef6565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a08231906024016020604051808303815f875af1158015610bde573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c029190613edf565b1015610c2157604051637bc35e0560e01b815260040160405180910390fd5b604080518981526020810189905233917f1c1db1f1d6a01e51fec24bb54087b65fe5430f692280e70d92f718eb72ae76b7910160405180910390a25050505050505050565b5f8080610c766008338989611e73565b60038101549091506001600160801b0390811690861611610c975784610ca6565b60038101546001600160801b03165b60038201549093506001600160801b03600160801b909104811690851611610cce5783610ce4565b6003810154600160801b90046001600160801b03165b91506001600160801b03831615610dd1576003810180548491905f90610d149084906001600160801b0316613f09565b92506101000a8154816001600160801b0302191690836001600160801b031602179055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb89856040518363ffffffff1660e01b8152600401610da39291906001600160a01b039290921682526001600160801b0316602082015260400190565b5f604051808303815f87803b158015610dba575f80fd5b505af1158015610dcc573d5f803e3d5ffd5b505050505b6001600160801b03821615610ec357818160030160108282829054906101000a90046001600160801b0316610e069190613f09565b92506101000a8154816001600160801b0302191690836001600160801b031602179055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb89846040518363ffffffff1660e01b8152600401610e959291906001600160a01b039290921682526001600160801b0316602082015260400190565b5f604051808303815f87803b158015610eac575f80fd5b505af1158015610ebe573d5f803e3d5ffd5b505050505b604080516001600160a01b038a1681526001600160801b0385811660208301528416818301529051600288810b92908a900b9133917fa89c1c8a741251492622c95237828c75d1dbb03ea956f09e3792ff2a14f4fe62919081900360600190a4509550959350505050565b6060610f93428484808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050600454600994939250600160a01b810460020b915061ffff600160b81b8204811691600160c81b900416611ecf565b90505b92915050565b5f805f805f610fe46040518060800160405280336001600160a01b031681526020018a60020b81526020018960020b815260200188610fda90613f28565b600f0b9052611ad1565b92509250925081610ff490613f4d565b9450610fff81613f4d565b93505f85118061100e57505f84115b1561107057600383015461102c9086906001600160801b0316613f67565b600384015461104c908690600160801b90046001600160801b0316613f67565b6001600160801b039182169116600160801b026001600160801b0319161760038401555b604080516001600160801b038816815260208101879052908101859052600288810b91908a900b9033907f0c396cd989a39f4459b5fa1aed6a9a8dcdbc45908acfd67e028cd568da98982c9060600160405180910390a4505050935093915050565b6040805160a0810182526004546001600160a01b0381168252600160a01b810460020b602083015261ffff600160b81b8204811693830193909352600160c81b810483166060830152600160d81b900490911660808201526005545f9182916001600160801b03168861118357815f01516001600160a01b0316876001600160a01b0316108061117e575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038816115b6111b3565b815f01516001600160a01b0316876001600160a01b031611806111b357506401000276a36001600160a01b038816105b156111d157604051632d4eeeb360e21b815260040160405180910390fd5b5f6040518060c001604052808a81526020015f8152602001845f01516001600160a01b03168152602001846020015160020b81526020018b61121557600354611219565b6002545b8152602001836001600160801b031681525090505b8051158015906112545750876001600160a01b031681604001516001600160a01b031614155b15611546576040805160e0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915260408201516001600160a01b0316815260608201516112d4906007907f00000000000000000000000000000000000000000000000000000000000000008e611f81565b1515604083015260020b602082018190526112ee90612136565b6001600160a01b03166060820152604082015161137f908c611328578a6001600160a01b031683606001516001600160a01b031611611342565b8a6001600160a01b031683606001516001600160a01b0316105b611350578260600151611352565b8a5b60a085015185517f0000000000000000000000000000000000000000000000000000000000000000612555565b60c0850190815260a0850191909152608084019182526001600160a01b039092166040850152905190516113b39190613ef6565b825183906113c2908390613f86565b90525060a08101516020830180516113db908390613ef6565b90525060a08201516001600160801b031615611426576114118160c00151600160801b8460a001516001600160801b0316612685565b826080018181516114229190613ef6565b9052505b80606001516001600160a01b031682604001516001600160a01b03160361150a578060400151156114dd575f61148a82602001518d6114675760025461146d565b84608001515b8e61147c578560800151611480565b6003545b600692919061274d565b90508b1561149e5761149b81613f28565b90505b6114ac8360a0015182612799565b6001600160801b031660a084018190525f036114db57604051634323a55560e01b815260040160405180910390fd5b505b8a6114ec5780602001516114fd565b600181602001516114fd9190613f99565b60020b6060830152611540565b805f01516001600160a01b031682604001516001600160a01b0316146115405761153782604001516127c9565b60020b60608301525b5061122e565b826020015160020b816060015160020b14611603575f80611587856040015161156c4290565b6020880151606089015160808a015160099493929190612afe565b604085015160608601516004805463ffffffff60b81b1916600160c81b61ffff9586160261ffff60b81b191617600160b81b9590941694909402929092176001600160b81b031916600160a01b62ffffff909316929092026001600160a01b031916919091176001600160a01b03909116179055506116289050565b6040810151600480546001600160a01b0319166001600160a01b039092169190911790555b8060a001516001600160801b0316826001600160801b03161461166a5760a0810151600580546001600160801b0319166001600160801b039092169190911790555b891561167d576080810151600255611686565b60808101516003555b896116aa57806020015161169990613f4d565b81516116a5908b613f86565b6116c4565b80516116b6908a613f86565b81602001516116c490613f4d565b909550935089156117c9576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a9059cbb8c61170887613f4d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b15801561174b575f80fd5b505af115801561175d573d5f803e3d5ffd5b505050505f61176a611d51565b60405163fa461e3360e01b8152909150339063fa461e339061179690899089908d908d90600401613ec0565b5f604051808303815f87803b1580156117ad575f80fd5b505af11580156117bf573d5f803e3d5ffd5b50505050506118bf565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a9059cbb8c61180288613f4d565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044015f604051808303815f87803b158015611845575f80fd5b505af1158015611857573d5f803e3d5ffd5b505050505f611864611de0565b60405163fa461e3360e01b8152909150339063fa461e339061189090899089908d908d90600401613ec0565b5f604051808303815f87803b1580156118a7575f80fd5b505af11580156118b9573d5f803e3d5ffd5b50505050505b60045460a08281015160408051898152602081018990526001600160a01b03808616828401526001600160801b039093166060820152600160a01b90940460020b608085015251908e169233927fc42079f94a6350d7e6235f29174924f928cc2ac818eb64fed8004e115fbcca6792918290030190a3505050965096945050505050565b6004546001600160a01b03161561196c5760405162dc149f60e41b815260040160405180910390fd5b5f611976826127c9565b90505f806119c6426009906040805160608101825263ffffffff929092168083525f602084015260019290910182905282546bffffffffffffffffffffffff191617600160581b17909155908190565b6040805160a0810182526001600160a01b0397909716808852600287900b60208901525f9188019190915261ffff92831660608801819052919092166080909601869052600480546001600160b81b031916909217600160a01b62ffffff909616959095029490941765ffffffffffff60b81b1916600160c81b90940261ffff60d81b191693909317600160d81b909402939093179091555050565b5f8261ffff168261ffff1611611a79575081611aca565b825b8261ffff168161ffff161015611ac5576001858261ffff1661ffff8110611aa457611aa4613fbe565b01805463ffffffff191663ffffffff92909216919091179055600101611a7b565b508190505b9392505050565b6040805160a0810182526004546001600160a01b0381168252600160a01b8104600290810b60208085019190915261ffff600160b81b8404811685870152600160c81b840481166060860152600160d81b909304909216608084015254600354855192860151948601515f958695869590949392611b529260089291611e73565b6020808901519085015160608a01519298505f92611b77926006929091878787612c41565b6040890151602086015160608b01519293505f92611b9d92600692909188886001612c41565b90508115611bd7576020890151611bd7906007907f0000000000000000000000000000000000000000000000000000000000000000612d46565b8015611c0f576040890151611c0f906007907f0000000000000000000000000000000000000000000000000000000000000000612d46565b6020808a015160408b0151918701515f928392611c3192600692908a8a612d96565b60608d01519193509150611c48908b908484612e7e565b8a6020015160020b876020015160020b1215611c8c57611c85611c6e8c60200151612136565b611c7b8d60400151612136565b8d60600151612fc4565b9850611d43565b8a6040015160020b876020015160020b1215611d1957611cb6875f0151611c7b8d60400151612136565b9850611cd4611cc88c60200151612136565b885160608e0151612ffe565b60055460608d0151919950611cf4916001600160801b0390911690612799565b600580546001600160801b0319166001600160801b0392909216919091179055611d43565b611d40611d298c60200151612136565b611d368d60400151612136565b8d60600151612ffe565b97505b505050505050509193909250565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a08231906024015b6020604051808303815f875af1158015611db7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ddb9190613edf565b905090565b6040516370a0823160e01b81523060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401611d9b565b5f611e3a848484612685565b90505f8280611e4b57611e4b613fd2565b8486091115611aca575f198110611e60575f80fd5b80611e6a81613fe6565b95945050505050565b6040805160609490941b6bffffffffffffffffffffffff191660208086019190915260e893841b60348601529190921b60378401528151601a818503018152603a90930182528251928101929092205f90815292909152902090565b6060845167ffffffffffffffff811115611eeb57611eeb613ffe565b604051908082528060200260200182016040528015611f14578160200160208202803683370190505b5090505f5b8551811015611f7657611f498888888481518110611f3957611f39613fbe565b602002602001015188888861302a565b828281518110611f5b57611f5b613fbe565b60069290920b60209283029190910190910152600101611f19565b509695505050505050565b5f8080611f8e8587614012565b90505f8660020b128015611fad5750611fa7858761404a565b60020b15155b15611fc05780611fbc8161406b565b9150505b831561206a575f80611fd183613194565b90925090505f600160ff831681901b90611feb9082613f86565b611ff59190613ef6565b600184900b5f90815260208c905260409020548116801515965090915085612034578861202560ff851687613f99565b61202f919061408c565b61205f565b8861203e826131b0565b61204890856140b2565b6120559060ff1687613f99565b61205f919061408c565b96505050505061212c565b5f8061207f61207a8460016140cb565b613194565b90925090505f612096600160ff841681901b613f86565b600184900b5f90815260208c9052604090205490199081168015159650909150856120ee57886120c78460ff6140b2565b60ff166120d58760016140cb565b6120df91906140cb565b6120e9919061408c565b612125565b88836120f9836132a5565b61210391906140b2565b60ff166121118760016140cb565b61211b91906140cb565b612125919061408c565b9650505050505b5094509492505050565b5f805f8360020b1261214b578260020b612158565b8260020b61215890613f4d565b9050612167620d89e719613e78565b62ffffff168111156121a45760405162461bcd60e51b81526020600482015260016024820152601560fa1b60448201526064015b60405180910390fd5b5f816001165f036121b957600160801b6121cb565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff169050600282161561220a576080612205826ffff97272373d413259a46990580e213a6140f0565b901c90505b600482161561223457608061222f826ffff2e50f5f656932ef12357cf3c7fdcc6140f0565b901c90505b600882161561225e576080612259826fffe5caca7e10e4e61c3624eaa0941cd06140f0565b901c90505b6010821615612288576080612283826fffcb9843d60f6159c9db58835c9266446140f0565b901c90505b60208216156122b25760806122ad826fff973b41fa98c081472e6896dfb254c06140f0565b901c90505b60408216156122dc5760806122d7826fff2ea16466c96a3843ec78b326b528616140f0565b901c90505b6080821615612306576080612301826ffe5dee046a99a2a811c461f1969c30536140f0565b901c90505b61010082161561233157608061232c826ffcbe86c7900a88aedcffc83b479aa3a46140f0565b901c90505b61020082161561235c576080612357826ff987a7253ac413176f2b074cf7815e546140f0565b901c90505b610400821615612387576080612382826ff3392b0822b70005940c7a398e4b70f36140f0565b901c90505b6108008216156123b25760806123ad826fe7159475a2c29b7443b29c7fa6e889d96140f0565b901c90505b6110008216156123dd5760806123d8826fd097f3bdfd2022b8845ad8f792aa58256140f0565b901c90505b612000821615612408576080612403826fa9f746462d870fdf8a65dc1f90e061e56140f0565b901c90505b61400082161561243357608061242e826f70d869a156d2a1b890bb3df62baf32f76140f0565b901c90505b61800082161561245e576080612459826f31be135f97d08fd981231505542fcfa66140f0565b901c90505b6201000082161561248a576080612485826f09aa508b5b7a84e1c677de54f3e99bc96140f0565b901c90505b620200008216156124b55760806124b0826e5d6af8dedb81196699c329225ee6046140f0565b901c90505b620400008216156124df5760806124da826d2216e584f5fa1ea926041bedfe986140f0565b901c90505b62080000821615612507576080612502826b048a170391f7dc42444e8fa26140f0565b901c90505b5f8460020b13156125205761251d815f19614107565b90505b61252e600160201b8261411a565b1561253a57600161253c565b5f5b61254d9060ff16602083901c613ef6565b949350505050565b5f8080806001600160a01b03808916908a161015816125898861257b89620f424061412d565b62ffffff16620f4240612685565b9050816125a25761259d8b8b8b60016133ce565b6125af565b6125af8b8b8b600161344e565b94508481106125c0578995506125cf565b6125cc8b8a8385613516565b95505b6001600160a01b03868116908b1614821561261257806125fb576125f68c888c600161344e565b6125fd565b855b955061260b8c888c5f6133ce565b945061263c565b80612629576126248c888c60016133ce565b61262b565b855b95506126398c888c5f61344e565b94505b806126525761264b868a613f86565b9350612676565b6126738662ffffff8a166126698b620f424061412d565b62ffffff16611e2e565b93505b50505095509550955095915050565b5f80805f19858709858702925082811083820303915050805f036126bc578382816126b2576126b2613fd2565b0492505050611aca565b8381106126e657604051631dcf306360e21b8152600481018290526024810185905260440161219b565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b600283810b5f908152602086905260408120918201549091906127709085613f86565b600282015560038101546127849084613f86565b600382015560010154600f0b95945050505050565b5f8082600f0b12156127bf576127ae82613f28565b6127b89084613f09565b9050610f96565b610f938284613f67565b5f6401000276a36001600160a01b03831610801590612804575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b6128345760405162461bcd60e51b81526020600482015260016024820152602960f91b604482015260640161219b565b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c979088119617909417909217179091171717608081106128cf576128c5607f82613f86565b83901c91506128e0565b6128da81607f613f86565b83901b91505b5f60406128ee608084614148565b901b9050828302607f1c92508260801c80603f1b8217915083811c935050828302607f1c92508260801c80603e1b8217915083811c935050828302607f1c92508260801c80603d1b8217915083811c935050828302607f1c92508260801c80603c1b8217915083811c935050828302607f1c92508260801c80603b1b8217915083811c935050828302607f1c92508260801c80603a1b8217915083811c935050828302607f1c92508260801c8060391b8217915083811c935050828302607f1c92508260801c8060381b8217915083811c935050828302607f1c92508260801c8060371b8217915083811c935050828302607f1c92508260801c8060361b8217915083811c935050828302607f1c92508260801c8060351b8217915083811c935050828302607f1c92508260801c8060341b8217915083811c935050828302607f1c92508260801c8060331b8217915083811c935050828302607f1c92508260801c8060321b82179150505f81693627a301d71055774c85612a709190614167565b90505f6080612a8f6f028f6481ab7f045a5af012a19d003aaa84614148565b901d90505f6080612ab0846fdb2df09e81959a81455e260799a0632f614196565b901d90508060020b8260020b14612aef57886001600160a01b0316612ad482612136565b6001600160a01b03161115612ae95781612af1565b80612af1565b815b9998505050505050505050565b5f805f888861ffff1661ffff8110612b1857612b18613fbe565b60408051606081018252919092015463ffffffff808216808452600160201b830460060b6020850152600160581b90920460ff161515938301939093529092509088169003612b6d5787859250925050612c36565b8461ffff168461ffff16118015612b955750612b8a6001866141bd565b61ffff168861ffff16145b15612ba257839150612ba6565b8491505b81612bb28960016141d7565b612bbc91906141f1565b9250612bc9818888613537565b898461ffff1661ffff8110612be057612be0613fbe565b82519101805460208401516040909401511515600160581b0260ff60581b1966ffffffffffffff909516600160201b026affffffffffffffffffffff1990921663ffffffff909416939093171792909216179055505b965096945050505050565b600286900b5f908152602088905260408120805461010090046001600160801b031682612c6e8289612799565b6001600160801b03808216159084168015919091141595509091505f03612cb7578860020b8a60020b13612cab5760028301879055600383018690555b825460ff191660011783555b825470ffffffffffffffffffffffffffffffff0019166101006001600160801b0383160217835584612cfe576001830154612cf990600f8a810b91900b614196565b612d14565b6001830154612d1490600f8a810b91900b614148565b60019390930180546001600160801b0319166001600160801b0390941693909317909255509098975050505050505050565b612d50818361404a565b60020b15612d5c575f80fd5b5f80612d6b61207a8486614012565b600191820b5f9081526020979097526040909620805460ff9097169190911b90951890945550505050565b600285810b5f8181526020899052604080822088850b83529082209193849391929184918291908a900b12612dd657505060028201546003830154612dfa565b6002840154612de59089613f86565b9150836003015487612df79190613f86565b90505b5f808b60020b8b60020b1215612e1b57505060028301546003840154612e3f565b6002850154612e2a908b613f86565b9150846003015489612e3c9190613f86565b90505b81612e4a858c613f86565b612e549190613f86565b975080612e61848b613f86565b612e6b9190613f86565b9650505050505050965096945050505050565b5f612ea7856001015484612e929190613f86565b86546001600160801b0316600160801b612685565b90505f612ed2866002015484612ebd9190613f86565b87546001600160801b0316600160801b612685565b8654909150612eea906001600160801b031686612799565b86546001600160801b0319166001600160801b0391821617875560018701859055600287018490558216151580612f2957505f816001600160801b0316115b15612fbc576003860180548391905f90612f4d9084906001600160801b0316613f67565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550808660030160108282829054906101000a90046001600160801b0316612f979190613f67565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b505050505050565b5f8082600f0b12612fe157612fdc848484600161344e565b61254d565b612ff58484612fef85613f28565b5f61344e565b61254d90613f4d565b5f8082600f0b1261301657612fdc84848460016133ce565b612ff5848461302485613f28565b5f6133ce565b5f8463ffffffff165f036130b1575f878461ffff1661ffff811061305057613050613fbe565b60408051606081018252919092015463ffffffff808216808452600160201b830460060b6020850152600160581b90920460ff16151593830193909352909250908816146130a6576130a3818887613537565b90505b60200151905061318a565b5f6130bc8688614214565b90505f806130ce8a8a858a8a8a6135b4565b91509150815f015163ffffffff168363ffffffff16036130f6575060200151915061318a9050565b805f015163ffffffff168363ffffffff160361311a5760200151925061318a915050565b815181515f9161312991614214565b63ffffffff1690505f835f0151856131419190614214565b63ffffffff16905080828560200151856020015161315f9190614230565b613169919061425d565b6131739190614290565b846020015161318291906142af565b955050505050505b9695505050505050565b600281900b60081d5f6131a96101008461404a565b9050915091565b5f8082116131bc575f80fd5b600160801b82106131da57608091821c916131d790826142dc565b90505b6801000000000000000082106131fd57604091821c916131fa90826142dc565b90505b600160201b821061321b57602091821c9161321890826142dc565b90505b62010000821061323857601091821c9161323590826142dc565b90505b610100821061325457600891821c9161325190826142dc565b90505b6010821061326f57600491821c9161326c90826142dc565b90505b6004821061328a57600291821c9161328790826142dc565b90505b600282106132a05761329d6001826142dc565b90505b919050565b5f8082116132b1575f80fd5b5060ff6001600160801b038216156132d5576132ce6080826140b2565b90506132dd565b608082901c91505b67ffffffffffffffff8216156132ff576132f86040826140b2565b9050613307565b604082901c91505b63ffffffff8216156133255761331e6020826140b2565b905061332d565b602082901c91505b61ffff821615613349576133426010826140b2565b9050613351565b601082901c91505b60ff82161561336c576133656008826140b2565b9050613374565b600882901c91505b600f82161561338f576133886004826140b2565b9050613397565b600482901c91505b60038216156133b2576133ab6002826140b2565b90506133ba565b600282901c91505b60018216156132a05761329d6001826140b2565b5f836001600160a01b0316856001600160a01b031611156133ed579293925b81156134245761341d6001600160801b03841661340a87876142f5565b6001600160a01b0316600160601b611e2e565b905061254d565b611e6a6001600160801b03841661343b87876142f5565b6001600160a01b0316600160601b612685565b5f836001600160a01b0316856001600160a01b0316111561346d579293925b5f856001600160a01b031611613481575f80fd5b600160601b600160e01b03606084901b165f61349d87876142f5565b6001600160a01b0316905083156134e1576134da6134c58383896001600160a01b0316611e2e565b886001600160a01b0316808204910615150190565b925061350c565b866001600160a01b03166134ff8383896001600160a01b0316612685565b6135099190614107565b92505b5050949350505050565b5f8161352c57613527858585613779565b611e6a565b611e6a8585856137a5565b604080516060810182525f808252602082018190529181019190915283515f906135619085614214565b63ffffffff16905060405180606001604052808563ffffffff168152602001828560020b61358f9190614290565b876020015161359e91906142af565b60060b8152600160209091015295945050505050565b604080516060810182525f8082526020820181905291810191909152604080516060810182525f8082526020820181905291810191909152878461ffff1661ffff811061360357613603613fbe565b60408051606081018252919092015463ffffffff8116808352600160201b820460060b6020840152600160581b90910460ff16151592820192909252925061364d90889088613847565b1561367857815163ffffffff878116911614612c36578161366f838888613537565b91509150612c36565b87836136858660016141d7565b61368f91906141f1565b61ffff1661ffff81106136a4576136a4613fbe565b60408051606081018252919092015463ffffffff81168252600160201b810460060b6020830152600160581b900460ff161515918101829052925061371d5760408051606081018252895463ffffffff81168252600160201b810460060b6020830152600160581b900460ff1615159181019190915291505b61372b87835f015188613847565b61375d5760405162461bcd60e51b815260206004820152600360248201526213d31160ea1b604482015260640161219b565b61376a8888888787613913565b91509150965096945050505050565b5f61379282600160601b856001600160801b0316612685565b61254d906001600160a01b038616613ef6565b5f600160601b600160e01b03606084901b16816137cb6001600160a01b038716856140f0565b90506001600160a01b0386166137e18583614107565b0361381a575f6137f18284613ef6565b90508281106138185761380e83886001600160a01b031683611e2e565b9350505050611aca565b505b61318a82856138326001600160a01b038a1683614107565b61383c9190613ef6565b808204910615150190565b5f8363ffffffff168363ffffffff161115801561387057508363ffffffff168263ffffffff1611155b1561388c578163ffffffff168363ffffffff1611159050611aca565b5f8463ffffffff168463ffffffff16116138b9576138b463ffffffff8516600160201b614314565b6138c1565b8363ffffffff165b64ffffffffff1690505f8563ffffffff168463ffffffff16116138f7576138f263ffffffff8516600160201b614314565b6138ff565b8363ffffffff165b64ffffffffff169091111595945050505050565b60408051606080820183525f80835260208084018290528385018290528451928301855281835282018190529281018390529091836139538660016141d7565b61395d91906141f1565b61ffff1690505f60018561ffff16836139769190613ef6565b6139809190613f86565b90505f5b60026139908385613ef6565b61399a9190614107565b9050896139ab61ffff88168361411a565b61ffff81106139bc576139bc613fbe565b60408051606081018252919092015463ffffffff81168252600160201b810460060b6020830152600160581b900460ff1615159181018290529550613a0d57613a06816001613ef6565b9250613984565b8961ffff8716613a1e836001613ef6565b613a28919061411a565b61ffff8110613a3957613a39613fbe565b60408051606081018252929091015463ffffffff81168352600160201b810460060b602084015260ff600160581b9091041615159082015285519094505f90613a84908b908b613847565b9050808015613a9c5750613a9c8a8a875f0151613847565b15613aa75750613ad2565b80613abe57613ab7600183613f86565b9250613acc565b613ac9826001613ef6565b93505b50613984565b5050509550959350505050565b5f60208284031215613aef575f80fd5b5035919050565b5f60208284031215613b06575f80fd5b813561ffff81168114611aca575f80fd5b6001600160a01b0381168114613b2b575f80fd5b50565b8035600281900b81146132a0575f80fd5b80356001600160801b03811681146132a0575f80fd5b5f8083601f840112613b65575f80fd5b50813567ffffffffffffffff811115613b7c575f80fd5b602083019150836020828501011115613b93575f80fd5b9250929050565b5f805f805f8060a08789031215613baf575f80fd5b8635613bba81613b17565b9550613bc860208801613b2e565b9450613bd660408801613b2e565b9350613be460608801613b3f565b9250608087013567ffffffffffffffff811115613bff575f80fd5b613c0b89828a01613b55565b979a9699509497509295939492505050565b5f805f8060608587031215613c30575f80fd5b8435935060208501359250604085013567ffffffffffffffff811115613c54575f80fd5b613c6087828801613b55565b95989497509550505050565b5f805f805f60a08688031215613c80575f80fd5b8535613c8b81613b17565b9450613c9960208701613b2e565b9350613ca760408701613b2e565b9250613cb560608701613b3f565b9150613cc360808701613b3f565b90509295509295909350565b5f60208284031215613cdf575f80fd5b81358060010b8114611aca575f80fd5b5f8060208385031215613d00575f80fd5b823567ffffffffffffffff811115613d16575f80fd5b8301601f81018513613d26575f80fd5b803567ffffffffffffffff811115613d3c575f80fd5b8560208260051b8401011115613d50575f80fd5b6020919091019590945092505050565b602080825282518282018190525f918401906040840190835b81811015613d9a57835160060b835260209384019390920191600101613d79565b509095945050505050565b5f805f60608486031215613db7575f80fd5b613dc084613b2e565b9250613dce60208501613b2e565b9150613ddc60408501613b3f565b90509250925092565b5f805f805f8060a08789031215613dfa575f80fd5b8635613e0581613b17565b955060208701358015158114613e19575f80fd5b9450604087013593506060870135613be481613b17565b5f60208284031215613e40575f80fd5b610f9382613b2e565b5f60208284031215613e59575f80fd5b8135611aca81613b17565b634e487b7160e01b5f52601160045260245ffd5b5f8160020b627fffff198103613e9057613e90613e64565b5f0392915050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b848152836020820152606060408201525f61318a606083018486613e98565b5f60208284031215613eef575f80fd5b5051919050565b80820180821115610f9657610f96613e64565b6001600160801b038281168282160390811115610f9657610f96613e64565b5f81600f0b6f7fffffffffffffffffffffffffffffff198103613e9057613e90613e64565b5f600160ff1b8201613f6157613f61613e64565b505f0390565b6001600160801b038181168382160190811115610f9657610f96613e64565b81810381811115610f9657610f96613e64565b600282810b9082900b03627fffff198112627fffff82131715610f9657610f96613e64565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b5f60018201613ff757613ff7613e64565b5060010190565b634e487b7160e01b5f52604160045260245ffd5b5f8160020b8360020b8061402857614028613fd2565b627fffff1982145f198214161561404157614041613e64565b90059392505050565b5f8260020b8061405c5761405c613fd2565b808360020b0791505092915050565b5f8160020b627fffff19810361408357614083613e64565b5f190192915050565b5f8260020b8260020b028060020b91508082146140ab576140ab613e64565b5092915050565b60ff8281168282160390811115610f9657610f96613e64565b600281810b9083900b01627fffff8113627fffff1982121715610f9657610f96613e64565b8082028115828204841417610f9657610f96613e64565b5f8261411557614115613fd2565b500490565b5f8261412857614128613fd2565b500690565b62ffffff8281168282160390811115610f9657610f96613e64565b8181035f8312801583831316838312821617156140ab576140ab613e64565b8082025f8212600160ff1b8414161561418257614182613e64565b8181058314821517610f9657610f96613e64565b8082018281125f8312801582168215821617156141b5576141b5613e64565b505092915050565b61ffff8281168282160390811115610f9657610f96613e64565b61ffff8181168382160190811115610f9657610f96613e64565b5f61ffff83168061420457614204613fd2565b8061ffff84160691505092915050565b63ffffffff8281168282160390811115610f9657610f96613e64565b600682810b9082900b03667fffffffffffff198112667fffffffffffff82131715610f9657610f96613e64565b5f8160060b8360060b8061427357614273613fd2565b667fffffffffffff1982145f198214161561404157614041613e64565b5f8260060b8260060b028060060b91508082146140ab576140ab613e64565b600681810b9083900b01667fffffffffffff8113667fffffffffffff1982121715610f9657610f96613e64565b60ff8181168382160190811115610f9657610f96613e64565b6001600160a01b038281168282160390811115610f9657610f96613e64565b64ffffffffff8181168382160190811115610f9657610f96613e6456fea2646970667358221220411a85f6625a35083f3972970abd4769b5e0aa1fda87d93ce15b9b19e78729a264736f6c634300081a0033a26469706673582212209e956934411449e57b53440bbe573fb08ab600d611847d3057f18cb6109b933564736f6c634300081a0033