0x608060405234801561001057600080fd5b507fdfea5b92a8258bad438d8fac6172658ec7a04c8276efee2b323add25c98d4baf805460ff1990811660019081179092557f0cc4399d83b2915b9b11a0b9f76f921cf640c9477d00b16abdfdb640214d7e3680548216831790557fb5579421dd3c1b2cad83c3adba7f9df0d360c98efdfb9c5889a11df0f35a466680548216831790557fd456e578595ade2e488865e923b149b360ac5baac85040a4ea134bdd07ea4e93805482168317905560046000526020919091527fedc95719e9a3b28dd8e80877cb5880a9be7de1a13fc8b05e7999683b6b56764380546001600160a01b031916731a3c9b1d2f0529d97f2afc5136cc23e58f1fd35b179055600280549091169055612069806101256000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80635c975abb1161005b5780635c975abb146100d35780637d965488146100db578063b0b62f5a146100ee578063d4d60246146100f65761007d565b80633a09d78214610082578063402a7e641461009757806358540536146100c0575b600080fd5b610095610090366004611f4f565b610109565b005b6100aa6100a5366004611dac565b610179565b6040516100b79190612003565b60405180910390f35b6100aa6100ce366004611dc7565b610234565b610095610335565b6100aa6100e9366004611dac565b610378565b61009561042b565b6100aa610104366004611dc7565b61046b565b3360009081526020819052604090205460ff1615156001146101465760405162461bcd60e51b815260040161013d90611fbd565b60405180910390fd5b60ff91909116600090815260016020526040902080546001600160a01b0319166001600160a01b03909216919091179055565b60025460009060ff161561019f5760405162461bcd60e51b815260040161013d90611fe0565b60006101b88360000151846020015185604001516105ae565b905060006040518060c00160405280856000015160ff16815260200185602001516001600160a01b0316815260200185604001516001600160a01b0316815260200185606001518152602001836001600160a01b0316815260200160006001600160a01b0316815250905061022c81610234565b949350505050565b60025460009060ff161561025a5760405162461bcd60e51b815260040161013d90611fe0565b600080600084604001516001600160a01b031685602001516001600160a01b03161090506000856080015190506000604051806060016040528084151581526020016000151581526020018860a001516001600160a01b03166000146102c4578860a001516102ea565b846102e35773fffd8963efd1fc6a506488495d951d5263988d256102ea565b6401000276a45b6001600160a01b0316815250905061030f826103098960600151610650565b83610666565b909550935060008513610325578460000361032a565b836000035b979650505050505050565b3360009081526020819052604090205460ff1615156001146103695760405162461bcd60e51b815260040161013d90611fbd565b6002805460ff19166001179055565b60025460009060ff161561039e5760405162461bcd60e51b815260040161013d90611fe0565b60006103b78360000151846020015185604001516105ae565b905060006040518060c00160405280856000015160ff16815260200185602001516001600160a01b0316815260200185604001516001600160a01b0316815260200185606001518152602001836001600160a01b0316815260200160006001600160a01b0316815250905061022c8161046b565b3360009081526020819052604090205460ff16151560011461045f5760405162461bcd60e51b815260040161013d90611fbd565b6002805460ff19169055565b60025460009060ff16156104915760405162461bcd60e51b815260040161013d90611fe0565b60008060008085604001516001600160a01b031686602001516001600160a01b031610905060008660800151905060008760a001516001600160a01b03166000146104dd575060608701515b6040805160608101825284151581526001602082015260a08a01516000928201906001600160a01b031615610516578a60a0015161053c565b856105355773fffd8963efd1fc6a506488495d951d5263988d2561053c565b6401000276a45b6001600160a01b031681525090506105648361055b8b60600151610650565b60000383610666565b9097509550600087136105775785610579565b865b975060008713610589578661058e565b856000035b945081156105a2578185146105a257600080fd5b50505050505050919050565b60ff831660009081526001602052604080822054905163d9a641e160e01b81526001600160a01b03909116908190819063d9a641e1906105f49088908890600401611f87565b60206040518083038186803b15801561060c57600080fd5b505afa158015610620573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106449190611d90565b925050505b9392505050565b6000600160ff1b821061066257600080fd5b5090565b600080610671611b77565b600061067c876109c7565b90506000816000015190506000826020015190506000896001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b1580156106cb57600080fd5b505afa1580156106df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107039190611de2565b60008a1361014087015260a086018a9052604085015161ffff16610160870152905061072d611be8565b6001600160a01b03841681528851610748908c908590610a84565b15156040830152600290810b900b6020820181905261076690610c5e565b6001600160a01b03908116606083018190528a5160408c01516107af93919288928415159216111461079c5783606001516107a2565b8b604001515b858e8b6101600151610f83565b60c085015260a0840152608083015261014087015190945015610808576107df8160c00151826080015101610650565b8a0399506107fe6107f38260a00151610650565b60c088015190611147565b60c0870152610840565b6108158160a00151610650565b8a01995061083a61082f8260c00151836080015101610650565b60c088015190611163565b60c08701525b80606001516001600160a01b0316846001600160a01b031614156109305780604001511561091057602081015160405163f30dba9360e01b81526000916001600160a01b038e169163f30dba939161089a91600401611faf565b6101006040518083038186803b1580156108b357600080fd5b505afa1580156108c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108eb9190611dfc565b505050505050915050896000015115610902576000035b61090c8382611179565b9250505b8851610920578060200151610929565b60018160200151035b9250610954565b80516001600160a01b038581169116146109545761094d8461122f565b9250610985565b891580610976575088604001516001600160a01b0316846001600160a01b0316145b1561098057610985565b61072d565b61014086015189511515901515146109a8578560c001518a8760a00151036109b5565b898660a00151038660c001515b909c909b509950505050505050505050565b6109cf611be8565b816001600160a01b031663e76c01e46040518163ffffffff1660e01b815260040160e06040518083038186803b158015610a0857600080fd5b505afa158015610a1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a409190611ea2565b151560c088015260ff90811660a088015216608086015261ffff9081166060860152166040840152600290810b900b60208301526001600160a01b03168152919050565b6000806000603c905080850715196000861216818605039450508215610b8757604051630633bf1f60e51b8152600885901c9060ff8681169160009183810316906001600160a01b038a169063c677e3e090610ae4908790600401611fa1565b60206040518083038186803b158015610afc57600080fd5b505afa158015610b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b349190611f37565b901b90508015610b6857610b478161154e565b60ff0360ff1687039650610b5a87611599565b600194509450505050610c56565b8160ff1687039650610b7987611599565b600094509450505050610c56565b604051630633bf1f60e51b815260019490940193600885901c9060ff86169060009082906001600160a01b038a169063c677e3e090610bca908790600401611fa1565b60206040518083038186803b158015610be257600080fd5b505afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a9190611f37565b901c90508015610c4257610c328182600003166115d1565b60ff1687019650610b5a87611599565b8160ff0360ff1687019650610b7987611599565b935093915050565b6000600282810b60171d90818418829003900b620d89e8811115610cad576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b600060018216610cc157600160801b610cd3565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615610d07576ffff97272373d413259a46990580e213a0260801c5b6004821615610d26576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615610d45576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615610d64576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615610d83576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615610da2576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615610dc1576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615610de1576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615610e01576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615610e21576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615610e41576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615610e61576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615610e81576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615610ea1576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615610ec1576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615610ee2576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615610f02576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615610f21576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615610f3e576b048a170391f7dc42444e8fa20260801c5b60008560020b1315610f59578060001981610f5557fe5b0490505b640100000000810615610f6d576001610f70565b60005b60ff16602082901c019350505050919050565b600080600080611c248a610f99576116ea610f9d565b6116f95b905060008712611089576000610fc5888861ffff16620f42400362ffffff16620f4240611708565b9050610fd68a8c8b8563ffffffff16565b945084811061100357899550610ffc8561ffff891662ffffff620f42408290031661179e565b9250611062565b61100f8b8a838f611812565b9550856001600160a01b03168a6001600160a01b03161461104557611039868c8b8563ffffffff16565b94508488039250611062565b61105f8561ffff891662ffffff620f42408290031661179e565b92505b611081868c8b8f6110755761182b611079565b61183a5b63ffffffff16565b935050611139565b611c248b6110995761182b61109d565b61183a5b90506110ae8a8c8b8463ffffffff16565b93508760000397508388106110c55789955061110a565b6110d18b8a8a8f611849565b9550856001600160a01b03168a6001600160a01b0316146110fe576110fb868c8b8463ffffffff16565b93505b8784111561110a578793505b611119868c8b8563ffffffff16565b94506111358561ffff891662ffffff620f42408290031661179e565b9250505b509650965096509692505050565b8082038281131560008312151461115d57600080fd5b92915050565b8181018281121560008312151461115d57600080fd5b60008082600f0b12156111de57826001600160801b03168260000384039150816001600160801b0316106111d9576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b61115d565b826001600160801b03168284019150816001600160801b0316101561115d576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b0383161080159061126b575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b6112a0576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b640100000000600160c01b03602083901b166001600160801b03811160071b81811c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c9790881196179094179092171790911717176080811061133457607f810383901c915061133e565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b1461153f57886001600160a01b031661152382610c5e565b6001600160a01b03161115611538578161153a565b805b611541565b815b9998505050505050505050565b600181811c909117600281901c17600481901c17600881901c17601081901c17602081901c17604081901c17608081901c179081901c90036000611591826115d1565b90505b919050565b603c8102620d89e719600282900b12156115b85750620d89e719611594565b620d89e8600282900b13156115945750620d89e8919050565b7f55555555555555555555555555555555555555555555555555555555555555558116156001600160801b0382161560071b1777ffffffffffffffff0000000000000000ffffffffffffffff82161560061b177bffffffff00000000ffffffff00000000ffffffff00000000ffffffff82161560051b177dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff82161560041b177eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff82161560031b177f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f82161560021b177f3333333333333333333333333333333333333333333333333333333333333333919091161560011b1790565b600061022c8385846001611859565b600061022c84848460016118ca565b6000838302816000198587098281108382030391505080841161172a57600080fd5b8061173a57508290049050610649565b8385870960008581038616958690049560026003880281188089028203028089028203028089028203028089028203028089028203028089029091030291819003819004600101858411909403939093029190930391909104170290509392505050565b60008315806117b9575050828202828482816117b657fe5b04145b156117da57600082116117cb57600080fd5b81810490829006151501610649565b6117e5848484611708565b9050600082806117f157fe5b848609111561064957600019811061180857600080fd5b6001019392505050565b600061182285858585600161194e565b95945050505050565b600061022c83858460006118ca565b600061022c8484846000611859565b600061182285858585600061194e565b6000846001600160a01b0316846001600160a01b0316101561187a57600080fd5b6001600160a01b0385850316826118a8576118a381856001600160801b0316600160601b611708565b6118c0565b6118c081856001600160801b0316600160601b61179e565b9695505050505050565b60006001600160a01b03858503811690851681106118e757600080fd5b600160601b600160e01b03606085901b168361192857866001600160a01b031661191b8383896001600160a01b0316611708565b8161192257fe5b0461032a565b61032a61193f8383896001600160a01b031661179e565b886001600160a01b0316611b46565b600080866001600160a01b03161161196557600080fd5b6000856001600160801b03161161197b57600080fd5b8115158315151415611a6d5783611993575084611822565b600160601b600160e01b03606086901b168215611a21576001600160a01b038716858102908682816119c157fe5b0414156119f2578181018281106119f0576119e6838a6001600160a01b03168361179e565b9350505050611822565b505b611a1882611a13888b6001600160a01b03168681611a0c57fe5b0490611b51565b611b46565b92505050611822565b6001600160a01b03871685810290868281611a3857fe5b0414611a4357600080fd5b808211611a4f57600080fd5b611a18611a68838a6001600160a01b031684860361179e565b611b61565b8115611ad457611acd611a686001600160a01b03861115611aa557611aa086600160601b896001600160801b0316611708565b611abd565b6001600160801b038716606087901b81611abb57fe5b045b6001600160a01b03891690611b51565b9050611822565b60006001600160a01b03851115611b0257611afd85600160601b886001600160801b031661179e565b611b19565b611b19606086901b6001600160801b038816611b46565b905080876001600160a01b031611611b3057600080fd5b6001600160a01b03871603905095945050505050565b808204910615150190565b8082018281101561115d57600080fd5b806001600160a01b038116811461159457600080fd5b604080516101c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052906101208201908152600060208201819052604082018190526060820181905260809091015290565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565bfe5b80356115948161200c565b8051801515811461159457600080fd5b600060a08284031215611c52578081fd5b60405160a0810181811067ffffffffffffffff82111715611c6f57fe5b6040529050808235611c8081612024565b81526020830135611c908161200c565b60208201526040830135611ca38161200c565b6040820152606083810135908201526080830135611cc08161200c565b6080919091015292915050565b600060c08284031215611cde578081fd5b60405160c0810181811067ffffffffffffffff82111715611cfb57fe5b6040529050808235611d0c81612024565b81526020830135611d1c8161200c565b60208201526040830135611d2f8161200c565b604082015260608381013590820152611d4a60808401611c26565b6080820152611d5b60a08401611c26565b60a08201525092915050565b80516001600160801b038116811461159457600080fd5b805161ffff8116811461159457600080fd5b600060208284031215611da1578081fd5b81516106498161200c565b600060a08284031215611dbd578081fd5b6106498383611c41565b600060c08284031215611dd8578081fd5b6106498383611ccd565b600060208284031215611df3578081fd5b61064982611d67565b600080600080600080600080610100898b031215611e18578384fd5b611e2189611d67565b9750602089015180600f0b8114611e36578485fd5b80975050604089015195506060890151945060808901518060060b8114611e5b578485fd5b60a08a0151909450611e6c8161200c565b60c08a015190935063ffffffff81168114611e85578283fd5b9150611e9360e08a01611c31565b90509295985092959890939650565b600080600080600080600060e0888a031215611ebc578081fd5b8751611ec78161200c565b8097505060208801518060020b8114611ede578182fd5b9550611eec60408901611d7e565b9450611efa60608901611d7e565b93506080880151611f0a81612024565b60a0890151909350611f1b81612024565b9150611f2960c08901611c31565b905092959891949750929550565b600060208284031215611f48578081fd5b5051919050565b60008060408385031215611f61578182fd5b8235611f6c81612024565b91506020830135611f7c8161200c565b809150509250929050565b6001600160a01b0392831681529116602082015260400190565b60019190910b815260200190565b60029190910b815260200190565b60208082526009908201526861646d696e6f6e6c7960b81b604082015260600190565b60208082526009908201526850617573656421212160b81b604082015260600190565b90815260200190565b6001600160a01b038116811461202157600080fd5b50565b60ff8116811461202157600080fdfea2646970667358221220b5c5a38bfe599a653f19312f18ab5627a90f86a882bf0b2c4b15f4b16c052d9f64736f6c63430007060033